import ttkbootstrap as ttk
from ttkbootstrap.constants import *
from ttkbootstrap.tableview import Tableview
import random
import datetime
# 中文本地化支持
# from ttkbootstrap.localization import MessageCatalog
# from localezhcn import *
# from ttkbootstrap import localization



# 生成随机演示数据
def generate_demo_data(num_rows=50):
    # 定义数据类别和值范围
    departments = ['销售部', '市场部', '技术部', '人力资源部', '财务部', '客服部']
    statuses = ['活跃', '休假', '离职', '试用期']
    projects = ['项目A', '项目B', '项目C', '项目D', '项目E', '无']
    
    data = []
    
    for i in range(1, num_rows + 1):
        # 生成随机数据
        name = f'员工{i:03d}'
        department = random.choice(departments)
        age = random.randint(22, 60)
        salary = round(random.uniform(5000, 25000), 2)
        hire_date = (datetime.datetime.now() - datetime.timedelta(days=random.randint(30, 3650))).strftime('%Y-%m-%d')
        status = random.choice(statuses)
        project = random.choice(projects)
        performance = random.randint(60, 100)
        
        # 添加到数据列表
        data.append({
            'id': i,
            'name': name,
            'department': department,
            'age': age,
            'salary': salary,
            'hire_date': hire_date,
            'status': status,
            'project': project,
            'performance': performance
        })
    
    return data

# 创建表格视图应用
def create_tableview_app():
    # 创建应用窗口，使用ttkbootstrap主题
    root = ttk.Window(themename="cosmo")
    # 然后进行本地化设置，确保使用已创建的窗口
    # localization.initialize_localities()
    # MessageCatalog.locale("zh_cn_all")
    root.title("员工信息管理系统")
    root.geometry("1200x600")
    
    # 创建一个框架来放置表格
    frame = ttk.Frame(root, padding=10)
    frame.pack(fill=BOTH, expand=YES)
    
    # 生成演示数据
    data = generate_demo_data()
    
    # 创建Tableview组件
    # 准备列定义 - 设置部分列可拉伸以实现自适应填充
    coldata = [
        {'text': '员工ID', 'stretch': False, 'anchor': 'center'},
        {'text': '姓名', 'stretch': True,  'anchor': 'center'},
        {'text': '部门', 'stretch': False,  'anchor': 'center'},
        {'text': '年龄', 'stretch': False,  'anchor': 'center'},
        {'text': '薪资', 'stretch': False,  'anchor': 'center'},
        {'text': '入职日期', 'stretch': False,  'anchor': 'center'},
        {'text': '状态', 'stretch': False,  'anchor': 'center'},
        {'text': '当前项目', 'stretch': True,  'anchor': 'center'},
        {'text': '绩效评分', 'stretch': False,  'anchor': 'center'}
    ]
    
    # 准备行数据
    rowdata = []
    for row in data:
        rowdata.append((
            row['id'], row['name'], row['department'], row['age'],
            f"¥{row['salary']}", row['hire_date'], row['status'],
            row['project'], row['performance']
        ))
    
    # 创建Tableview组件（ttkbootstrap的Tableview）
    table = Tableview(
        frame,
        coldata=coldata,
        rowdata=rowdata,
        paginated=True,
        searchable=True,
        bootstyle="primary",
        # stripecolor=("", "#f0f0f0"),
        autoalign=True,
        autofit=True,
        height=15
    )
    
    # ttkbootstrap的Tableview内置了排序功能
    
    # 布局表格（Tableview内置了滚动条）
    table.pack(fill=BOTH, expand=YES)
    
    
    # 添加一些控制按钮
    control_frame = ttk.Frame(root, padding=10)
    control_frame.pack(fill=X)
    
    # 添加刷新按钮
    refresh_btn = ttk.Button(control_frame, text="刷新数据", command=lambda: refresh_table_data(table))
    refresh_btn.pack(side=LEFT, padx=5)
    
    # 添加筛选按钮
    filter_btn = ttk.Button(control_frame, text="按部门筛选", command=lambda: filter_by_department(table))
    filter_btn.pack(side=LEFT, padx=5)
    
    # 添加导出按钮
    export_btn = ttk.Button(control_frame, text="导出数据", command=lambda: export_data(data))
    export_btn.pack(side=LEFT, padx=5)
    
    # 返回应用实例
    return root, table

# 刷新表格数据
def refresh_table_data(table):
    # 生成新的随机数据
    new_data = generate_demo_data()
    
    # 准备新的行数据
    rowdata = []
    for row in new_data:
        rowdata.append((
            row['id'], row['name'], row['department'], row['age'],
            f"¥{row['salary']}", row['hire_date'], row['status'],
            row['project'], row['performance']
        ))
    
    # 使用Tableview的方法更新数据
    table.build_table_data(rowdata=rowdata)

# 按部门筛选数据
def filter_by_department(table):
    # 创建一个新窗口用于筛选
    filter_window = ttk.Toplevel()
    filter_window.title("按部门筛选")
    filter_window.geometry("300x200")
    filter_window.transient(table.winfo_toplevel())  # 设置为主窗口的子窗口
    filter_window.grab_set()  # 模态窗口
    
    # 创建标签
    ttk.Label(filter_window, text="选择部门：").pack(pady=10)
    
    # 创建下拉选择框
    departments = ['所有部门', '销售部', '市场部', '技术部', '人力资源部', '财务部', '客服部']
    selected_dept = ttk.StringVar(value="所有部门")
    dept_combo = ttk.Combobox(filter_window, textvariable=selected_dept, values=departments, state="readonly")
    dept_combo.pack(pady=10, padx=20, fill=X)
    
    # 筛选按钮
    def apply_filter():
        # 获取当前选择的部门
        dept = selected_dept.get()
        
        # 生成新数据
        data = generate_demo_data()
        
        # 根据选择的部门筛选数据
        if dept != "所有部门":
            data = [row for row in data if row['department'] == dept]
        
        # 准备筛选后的行数据
        rowdata = []
        for row in data:
            rowdata.append((
                row['id'], row['name'], row['department'], row['age'],
                f"¥{row['salary']}", row['hire_date'], row['status'],
                row['project'], row['performance']
            ))
        
        # 使用Tableview的方法更新筛选后的数据
        table.build_table_data(rowdata=rowdata)
        
        # 关闭筛选窗口
        filter_window.destroy()
    
    # 添加应用按钮
    apply_btn = ttk.Button(filter_window, text="应用", command=apply_filter)
    apply_btn.pack(pady=20)

# 导出数据（模拟）
def export_data(data):
    # 这里只是模拟导出功能，实际项目中可以导出为CSV或Excel文件
    print(f"导出了 {len(data)} 条数据")
    # 实际项目中可以使用pandas等库来导出数据
    # import pandas as pd
    # df = pd.DataFrame(data)
    # df.to_csv("员工数据.csv", index=False, encoding='utf-8-sig')
    
    # 显示导出成功提示
    success_window = ttk.Toplevel()
    success_window.title("导出成功")
    success_window.geometry("250x150")
    success_window.transient(None)  # 设置为主窗口的子窗口
    success_window.grab_set()  # 模态窗口
    
    ttk.Label(success_window, text=f"成功导出了 {len(data)} 条数据！").pack(pady=30)
    ttk.Button(success_window, text="确定", command=success_window.destroy).pack(pady=10)

# 主函数
if __name__ == "__main__":
    # 创建表格视图应用
    root, table = create_tableview_app()
    # 运行应用
    root.mainloop()